咨询热线:

17661095540

联系QQ:

2863379292

官方微信:

如何在微信小程序的页面间传递数据?

微信营销

导读:使用全局变量 在初始化代码的时候,小程序会读取一个app.js的文件,在这里我们可以定义我们所需要的全局变量。});//page.js ...var app = getApp()var getFoo = app.globalData

发表日期:2019-10-20

文章编辑:兴田科技

浏览次数:8777

标签:

在微信小程序的开发中,我们会经常遇到页面间数据传递或者相互影响的问题。在实际的开发过程中,可以通过以下几种方法来实现。

使用全局变量

全局变量实际上是定义了一个全局的对象,并在每个页面中引入。

在初始化代码的时候,小程序会读取一个app.js的文件,在这里我们可以定义我们所需要的全局变量。

//app.js ...App({globalData: {foo:'bar' }

});

然后在页面中,可以通过getApp()方法获取到全局应用对象,可以对全局变量进行读取并更改:

//page.js ...var app = getApp()var getFoo = app.globalData.foo app.globalData.foo ='fun'

由于app.js在项目中是用来做基础配置的,因此不建议将很多变量放在这里配置。一般情况下会将一些持久化的常量配置在这里,对于经常需要变动的量不建议用这个方法。

使用本地缓存

本地缓存是微信小程序提供的一个功能,可以将用户产生的数据做本地的持久化,类似于 NoSQL,可以进行读取和修改的操作。

那么在不同的页面之间,如何利用它,进行数据的交互呢?

假设我们在 A 页面保存了用户的信息。

// pageA.js...var developer = {

name:'raymond',

gender:'male' }

wx.setStorageSync('developer', developer);

这样做,这个数据就存在了本地。当在 B 页面需要使用的时候,可以直接的获取到数据池中的数据,并进行 CRUD 操作:

//pageB.js ...// Retrievevar developer = (wx.getStorageSync('developer') || [])// Update developer.name ='Jiayang' wx.setStorageSync('developer', developer);// Delete wx.removeStorage({

key:'developer' })

需要注意的是,在回到 A 页面的时候,小程序需要重新读取数据。这时候,可以选择放在生命周期的onShow中对数据重新加载

父级往子级页面(模板)的数据传递

我们通常会在页面之间进行跳转、重定向的操作。这时候,我们可以选择将部分数据放在url里面,并在新页面onLoad的时候进行初始化。

pageC.js ...// Navigatewx.navigateTo({url:'../pageD/pageD?name=raymond&gender=male',

})// Redirectwx.redirectTo({url:'../pageD/pageD?name=raymond&gender=male',

})

在 D 页面中,我们可以这样接收到到所传进来的参数:

// pageD.js ...

page({

onl oad: function(option){

console.log(option.name +'is' +option.gender)

this.setData({option:option })

}

})

wx.navigateTo和wx.redirectTo不允许跳转到 tab 所包含的页面,只能用wx.switchTab跳转。需要注意的是,wx.switchTab中的url不能传参数。

微信新提供的wx.reLaunch接口可以传入参数。

另外,在页面中我们通常会用到一些组件模板,因此在父子之间也会有相应的数据传递。

使用name属性,作为模板的名字。然后在这里面使用is属性,声明需要的使用的模板。

{{index}}: {{msg}}Time: {{time}}

然后将模板所需要的data传入,如:

<templateis="msgItem"data="{{...item}}"/>

page({data: {item: {index:0,msg:'this is a template',time:'2016-09-15' }

}

})

传入模板的除了变量,还可以是事件方法对象。例如,模板中的点击事件,可以传递到使用模板的元素中。

通过获取到页面对象进行数据操作

这个方法的精髓,是通过获取到其他页面的对象原型,然后通过原型方法setData对当前对象管理的data进行修改,示例如下:

//pageE.js ...page({data: {index:1 }

})

当跳转到下一个页面 F 之后,假定在 F 中有操作需要对 E 中的数据有修改,则可以使用以下方法:

pageF.js

...

page({

changeIndexInE:function(){var pages = getCurrentpages();var prevpage = pages[pages.length -2];

prevpage.setData({

index:0 })

}

})

这个方法可以操作页面堆栈里面的页面的数据,可以做到让后一级页面对上级页面群的数据管理。

小结

在微信小程序中有以上并且不局限于以上几种的方式进行页面间数据传递、交互,在实际应用中可以组合使用。比如说:

●一些常量,可以交由app.js管理;需要持久化的量可以放在本地保存。

●涉及到下级页面或者模板元素的数据,可以通过传入参数的方式传入。

●后级页面可以通过获取堆栈里的页面对象快速修改上级的数据。

在实际应用中结合使用,可以更好地管理小程序的数据。

本文如有不周到之处,可以留言进行讨论。

相关推荐

更多新闻

  • 8-23

    2023

    微信营销 / 2023-08-23

    临清网站建设的重要性

    通过临清网站建设,企业可以展示他们的产品和服务,吸引潜在客户,并促使他们进行购买行为。一个直观的购物车系统和简化的结账流程可以为客户提供无缝的购买体验,从而增加销售机会。

    View details

  • 8-28

    2023

    微信营销 / 2023-08-28

    南漳网络推广:提升业务发展及品牌知名度的关键

    南漳网络推广使企业能够找到更多潜在的客户。通过选择正确的目标受众和使用精确的广告定位,企业可以将产品或服务推送给真正对其感兴趣的人群。这有助于提高潜在客户的数量,并将他们转化为实际购买或合作的客户。

    View details

  • 8-28

    2023

    微信营销 / 2023-08-28

    吴忠网站建设:如何打造一个优质的在线品牌?

    网站是企业与潜在客户之间的第一次互动机会。当人们访问您的网站时,他们会形成对您品牌的第一印象。一个吸引人且专业的网站设计将帮助您在激烈的竞争环境中脱颖而出。通过吴忠网站建设,您可以展示您的企业形象、产品和服务,并与潜在客户建立真正的连接。

    View details

  • 8-28

    2023

    微信营销 / 2023-08-28

    合肥网络推广:让您的企业腾飞

    在如今竞争激烈的市场环境中,合肥网络推广已经成为企业提升品牌曝光、增加销售业绩的重要手段。通过搜索引擎优化和社交媒体营销等策略,企业可以拓展潜在客户群体、提高品牌曝光度,并降低市场营销成本。合肥网络推广将帮助您的企业腾飞,抢占市场份额,取得成功。

    View details